<?php
/*
Description: This plgin allow to create new post type corso
Version: 1.0
Author: Carmine Ricco - Luca De Cristofano
Author URI: #
License: GPL2
 */

// fissa gli hook
function wpf_corso_hooks()
{
	// creo il plugin ed i relativi menu
	register_activation_hook(__FILE__, 'wpf_corso_rewrite_flush'); // serve per i permalink
	add_action('init', 'wpf_corso_init'); // quando inizializzo la pagina

	add_action('admin_init', 'wpf_corso_add_boxes', 1); // solo per compatibilità

	// genero la tabella per la visualizzazione dei moduli :
// 	add_filter('manage_edit-wpf_corso_columns', 'wpf_corso_list_column_header'); // aggiunge la colonna "azienda" alla lista dei fascicoli
// 	add_action('manage_wpf_corso_posts_custom_column', 'wpf_corso_list_column_row', 10, 2); // riempie la colonna azienda alla lista dei fascicoli
// 	add_filter('manage_edit-wpf_corso_sortable_columns', 'wpf_corso_list_sort_columns'); // rende ordinabile per una colonna

	// salvo i dati dei vari box creati
	add_action('save_post', 'wpf_corso_dati_aggiuntivi_save', 10, 2);
}

// inizializza quello che serve
function wpf_corso_init()
{

	// creazione del posttype
	$labels = array(
		'name' => _x('Corsi', 'I corsi erogati sono di varie tipologie (FAD, OFFLINE, FACE2FACE)'),
		'singular_name' => _x('Corso', 'Nome singolare del Corso'),
		'add_new' => _x('Aggiungi nuovo', 'wpf_corso'),
		'add_new_item' => __('Nuovo Corso'),
		'edit_item' => __('Modifica Corso'),
		'new_item' => __('Nuovo Corso'),
		'all_items' => __('Tutti i Corsi'),
		'view_item' => __('Visualizza questo Corso'),
		'search_items' => __('Cerca un Corso'),
		'not_found' => __('Nessun Corso trovato'),
		'not_found_in_trash' => __('Non ci sono Corsi nel cestino'),
		'parent_item_colon' => '',
		'menu_name' => 'Corsi'
	);

	$args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'show_in_menu' => true,
		'query_var' => true,
		'rewrite' => array(
			'slug' => 'corso'
		),
		'capability_type' => array('corso', 'corsi'),
		'has_archive' => true,
		'map_meta_cap' => true,
		'hierarchical' => true,
		'menu_position' => null,
		'supports' => array(
			'title'
		)
	);

	register_post_type('wpf_corso', $args);
}

// serve per gestire i permalink
function wpf_corso_rewrite_flush()
{
	wpf_corso_init();
	flush_rewrite_rules();
}

// aggiunge i boxes necessari a wpf_corso
function wpf_corso_add_boxes()
{
	// aggiungo il pannello �indirizzo�; se ne possono aggiungere vari
	wpf_corso_generale_box();
	wpf_corso_dati_aggiuntivi_box();
	add_meta_box('spese', 'Spese generiche', 'wpf_corso_spese_box', 'wpf_corso', 'side', 'default', '');
	
	/*
	add_meta_box('dati_aggiuntivi', 'Dati aggiuntivi', 'wpf_corso_dati_aggiuntivi_box', 'wpf_corso', 'advanced', 'core', '');
	*/
        
    //register_post_parentbox('wpf_corso', 'Progetto',wpf_get_query('progetti_pubblicati'),__("Progetto del corso", WPF_DOMAIN ));
}

function wpf_corso_generale_box()
{
	wp_nonce_field(plugin_basename(__FILE__), 'wpf_corso_noncename');
	
	$form_fields = array(
            'codice' => array(
					'type' => 'smalltext',
                	'description' => __("Codice", WPF_DOMAIN ), 
                	'howto' => __("Inserisci qui il codice del corso", WPF_DOMAIN )
			),
            'descrizione' => array(
					'type' => 'text',
                	'description' => __("Descrizione", WPF_DOMAIN ), 
                	'howto' => __("Inserisci qui la descrizione del corso", WPF_DOMAIN )
			),
            'data_pubblicazione' => array(
					'type' => 'date',
                	'description' => __("Data pubblicazione", WPF_DOMAIN ), 
                	'howto' => __("Data di pubblicazione del corso", WPF_DOMAIN )
			)
	);
	
	register_post_box('wpf_corso', 'generale_corso', 'Generale', 'normal', 'core', $form_fields);
}

// crea il box per dati aggiuntivi
function wpf_corso_dati_aggiuntivi_box()
{
	global $post;
	global $domain;

	// Use nonce for verification
	wp_nonce_field(plugin_basename(__FILE__), 'wpf_corso_noncename');
	// The actual fields for data entry

	/*
	$cod = get_post_meta($post->ID, 'codice', true);
	$prj = get_post_meta($post->ID, 'progetto', true);

	$data_day_values =
		__("On module accessible", $domain) .
	 	"," .
		__("When level is ...", $domain) .
		"," .
		__("When user have ...", $domain) .
		"," .
		__("Every ... days", $domain) .
		"," .
		__("Every ... of the month", $domain) .
		"," .
		__("Time interval", $domain) .
		"," .
		__("After ... days from the first activation", $domain) .
		"," .
		__("After password", $domain);

	

	admin_field('data_inizio',  'date', 'Data inizio', get_post_meta($post->ID, 'data_inizio', true), 'wpf_corso', 'Inserire qui la data di inizio corso.');
	admin_field('data_fine', 'date', 'Data fine', get_post_meta($post->ID, 'data_fine', true), 'wpf_corso', 'Inserire qui la data di fine corso.');
	*/
	
	$form_fields = array(
            'data_inizio' => array(
					'type' => 'date',
                	'description' => __("Data inizio", WPF_DOMAIN ), 
                	'howto' => __("Inserisci qui la data di inizio del corso", WPF_DOMAIN )
			),
            'data_fine' => array(
					'type' => 'date',
                	'description' => __("Data fine", WPF_DOMAIN ), 
                	'howto' => __("Inserisci qui la data di fine corso", WPF_DOMAIN )
			),
            'calendario' => array(
					'type' => 'text',
                	'description' => __("Calendario", WPF_DOMAIN ), 
                	'howto' => __("Inserisci data e orario per il corso", WPF_DOMAIN )
			)
	);
	
	register_post_box('wpf_corso', 'dati_aggiuntivi_corso', 'Dati aggiuntivi', 'normal', 'core', $form_fields);
}

function wpf_corso_spese_box()
{
	global $post;

	$query = wpf_get_query('spese_corso', $post->ID);
	$columns = array(
			'title' => 'Spesa',
			'status' => 'Stato'
	);
	$options = array(
			'singular' => 'Spesa',
			'plural' => 'Spese',
			'ajax' => false,
			'actions' => array('edit' => 'Edit', 'unlink' => 'Unlink'),
			'comment' => 'code'
	);
	admin_table_posts($options, $columns, $query);
	
	if (in_array($post->post_status, array('pending', 'publish', 'ongoing')))
	{
		$nonassociate_list = query_posts(wpf_get_query('spese_nonassociate'));
		$nonassociate = '<option></option>';
		foreach ($nonassociate_list as $id => $spesa)
		{
			$nonassociate .= '<option value="' . $spesa->ID . '">' . $spesa->post_title . '</option>';
		}
		echo '<select id="associa_spesa" name="associa_spesa">' . $nonassociate . '</select>';
		echo '<input type="submit" name="associa" id="associa-spesa" value="Associa"  class="button"/>';
		echo '<a href="post-new.php?post_type=wpf_spesa&parent=' . $post->ID . '" class="button">' . _('Aggiungi nuovo') . '</a>';
	}
}

// cattura e salva i dati del box dati aggiuntivi
function wpf_corso_dati_aggiuntivi_save($post_id, $post)
{
	
	//var_dump($post_ID);
	// verify if this is an auto save routine.
	// If it is our form has not been submitted, so we dont want to do anything
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
	{
		return;
	}

    if ('wpf_corso' != $post->post_type) return;
            
	// verify this came from the our screen and with proper authorization,
	// because save_post can be triggered at other times
	/*if (!wp_verify_nonce($_POST['wpf_corso_noncename'], plugin_basename(__FILE__)))
	{
		return;
	}*/

	if (!current_user_can('edit_corsi'))
	{
		return;
	}

	
	
		// OK, you can save the data
		$my_post = array();
		$my_post['ID'] = $post_id;
		$my_post['post_title'] = $post->nome;
		$my_post['post_content'] = $post->descrizione;

		remove_action('save_post', 'wpf_corso_dati_aggiuntivi_save');
		wp_update_post($my_post);
		add_action('save_post', 'wpf_corso_dati_aggiuntivi_save');

		admin_field_save_post_meta($post_id, 'codice', $post->codice);
		admin_field_save_post_meta($post_id, 'data_pubblicazione', $post->data_pubblicazione);
		admin_field_save_post_meta($post_id, 'data_inizio', $post->data_inizio);
		admin_field_save_post_meta($post_id, 'data_fine', $post->data_fine);
		admin_field_save_post_meta($post_id, 'calendario', $post->calendario);
	
}

// // aggiunge il contenuto della colonna nella tabella
// function wpf_corso_list_column_row($column_name, $id)
// {
// 	global $post;
// 	// verifico quale colonna sto riempiendo
// 	if ($column_name == 'progetto')
// 		echo get_post_meta($id, 'progetto', true);
// 	if ($column_name == 'macrovoce')
// 	{
// 		$macrovoce_terms = wp_get_object_terms($post->ID, 'macrovoce');
// 		if (!empty($macrovoce_terms))
// 		{
// 			if (!is_wp_error($macrovoce_terms))
// 			{
// 				foreach ($macrovoce_terms as $term)
// 				{
// 					echo '<a href="' . get_term_link($term->slug, 'macrovoce') . '">' . $term->name . '</a>, ';
// 				}
// 			}
// 		}
// 	}
// 	//if ( $column_name == 'parent' )         echo $post->post_title.'['.get_post_meta($post->post_parent,'organization',true).']';
// }

// // aggiunge le colonne della tabella
// function wpf_corso_list_column_header($cols)
// {
// 	$newcols['cb'] = $cols['cb']; // <input type="checkbox"/>
// 	$newcols['title'] = 'Titolo';
// 	$newcols['progetto'] = 'progetto';
// 	$newcols['macrovoce'] = 'macrovoce';

// 	foreach ($cols as $k => $v)
// 		$newcols[$k] = $v;
// 	return $newcols;
// }

// // indica che la colonna � ordinabile
// function wpf_corso_list_sort_columns($cols)
// {
// 	$cols['progetto'] = 'progetto'; // adesso la tabella � ordinabile per indirizzo
// 	$cols['macrovoce'] = 'macrovoce';
// 	return $cols;
// }

function wpf_corso_extends($post)
{
	// solo in caso di corso
	if ($post->post_type != 'wpf_corso')
	{
		return;
	}

	$post->codice = get_post_meta($post->ID,'codice',true);
	$post->data_pubblicazione = get_post_meta($post->ID,'data_pubblicazione',true);
	$post->data_inizio = get_post_meta($post->ID,'data_inizio',true);
	$post->data_fine = get_post_meta($post->ID,'data_fine',true);
	$post->calendario = get_post_meta($post->ID,'calendario',true);
}

function wpf_corso_render_field($field, $field_id)
{
	global $post;
	
    if ($field_id == 'progetto')
	{
		$field['default'] = $post->post_parent;	
	}
	
    switch ($post->post_status)
	{
		//@TODO completare gli stati
		/*
		case 'incorso':
		case 'completato':
		case 'rendicontato':
		*/
        case 'pending':
        case 'publish':
            if (in_array($field_id, array('codice', 'progetto')))
			{
				$field['readonly'] = true;
				$field['values'] = '';
			}
			
        	break;
    }

    return $field;
}

wpf_corso_hooks();

?>
